题目说明
1 | 给定一个非负整数数组,你最初位于数组的第一个位置。 |
解题思路一
贪心算法。
首先我们要理解这个题目。
以 [3,5,2,4,1,1,1,1,1]为例子
index表示我们所处nums中的位置,maxLength代表我们下一步最远能到达的位置。
- 第0步时,我们处在index = 0,maxLength = 3,表示我们现在最远可以到达index = 3的位置。
- 当我们选择跳一步时,我们拥有了
5,maxLength就变成了index(1,5的下标)+ 5 = 6,相当于从0-6的位置尽在我们掌握了 - 当我们选择跳二步时,我们拥有的是
2,maxLength就变成了index(2,2的下标)+ 2 = 4,显然没有6大呀,不可取,不可取。 - 当我们选择跳三步时,我们拥有的是
4,maxLength就变成了index(3,4的下标)+4 = 7,比6大,可以走的更远了,不错不错,就要他了。现在我们掌握了从0 - 7的位置跳转的权力了,所以它是目前的最优解,包含了其他的所以情况。 - 这个时候我们的位置就变成了,
index = 3, maxLength = 7 - 然后我们判断一下,我们现在的最远距离能不能到达结尾
(maxLength >= (nums.length - 1)) ?,如果可以,那就结束啦,目前我们走了1步,那么下一步就可以到了,所以就是一共要走 1 + 1 步,返回2就好啦。 - 如果不可以,那还得从
步骤 1 到步骤 5再来一遍。
上面的过程,表示了我们正常处理的流程,符合我们的的思考习惯。所以问题其实就转化为了,求 可跳跃范围内的下标index + nums[index]的最大值,取出这个值,作为下一次的起点。
代码实现一
1 | /** |